본문으로 건너뛰기

Process

프로세스는 실행 중인 프로그램이다. 프로세스의 현재 활동의 상태는 프로그램 카운터 값과 프로세서 레지스터의 내용으로 나타낸다.

  • 컴퓨터에서 연속적으로 실행되고 있는 프로그램
  • 메모리에 올라와 실행되고 있는 프로그램의 인스턴스
  • 운영체제로부터 시스템 자원을 할당받는 작업의 단위
  • 즉, 동적인 개념으로는 실행된 프로그램

프로세스는 일반적으로 네개의 섹션으로 구성된다.

  • Code: 코드 자체를 구성하는 메모리 영역(프로그램 명령)
  • Data: 전역 변수, 정적 변수, 배열 등
  • Heap: 프로그램 실행 중에 동적으로 할당되는 메모리
  • Stack: 함수를 호출할 때 임시 데이터 저장장소(예: 함수 매개변수, 복귀 주소 및 지역 변수)

텍스트 및 데이터 섹션의 크기는 고정되기 때문에 프로그램 실행 시간 동안 크기가 변하지 않는다. 그러나 스택 및 힙 섹션은 호출될 때마다 함수 매개변수, 지역 변수 및 복귀 주소를 포함하는 활성화 레코드(activation record)가 스택에 푸쉬된다. 함수에서 제어가 되돌아오면 스택에서 활성화 레코드가 팝 된다. 마찬가지로 메모리가 동적으로 할당됨에 따라 힙이 커지고 메모리가 시스템에 반환되면 축소된다. 스택 및 힙 섹션이 서로의 방향으로 커지더라도 운영체제는 서로 겹치지 않도록 해야 한다.

프로세스 상태

컴퓨터를 사용할 때 여러 프로세스들이 빠르게 번갈아 가면서 실행된다. 그 과정에서 하나의 프로세스는 여러 상태를 거치며 실행된다. 그리고 운영체제는 프로세스의 상태를 PCB를 통해 인식하고 관리한다.

프로세스 상태를 표현하는 방식은 운영체제마다 조금씩 차이가 있지만, 프로세스가 가질 수 있는 대표적인 상태는 생성, 준비, 실행, 대기, 종료 상태가 있다.

위와 같은 도표를 프로세스 상태 다이어그램(process state diagram)이라고 한다.

생성 상태

프로세스를 생성 중인 상태를 생성 상태(new)라고 합니다. 이제 막 메모리에 적재되어 PCB를 할당받은 상태입니다. 생성 상태를 거쳐 실행할 준비가 완료된 프로세스는 곧바로 실행되지 않고 준비 상태가 되어 CPU의 할당을 기다립니다.

준비 상태

준비 상태(ready)는 당장이라도 CPU를 할당받아 실행할 수 있지만, 아직 자신의 차례가 아니기에 기다리고 있는 상태입니다. 준비 상태 프로세스는 차례가 되면 CPU를 할당받아 실행 상태가 됩니다.

준비 상태인 프로세스가 실행 상태로 전환되는 것을 디스패치(dispatch)라고 합니다.

실행 상태

실행 상태(running)은 CPU를 할당받아 실행 중인 상태를 의미합니다. 실행 상태인 프로세스는 일정 시간동안만 CPU를 사용할 수 있습니다. 이 때 프로세스가 할당된 시간을 모두 사용한다면(타이머 인터럽트가 발생하면) 다시 준비 상태가 되고, 실행 도중 입출력장치를 사용하여 입출력장치의 작업이 끝날 때까지 기다려야 한다면 대기 상태가 됩니다.

대기 상태

프로세스는 실행 도중 입출장치를 사용하는 경우가 있습니다. 입출력 작업은 CPU에 비해 처리 속도가 느리기에, 입출력 작업을 요청한 프로세스는 입출력 장치가 입출력을 끝낼 때 까지(입출력 완료 인터럽트를 받을 때까지) 기다려야 합니다. 이렇게 입출력장치의 작업을 기다리는 상태를 대기 상태(blocked)라고 합니다. 입출력 작업이 완료되면 해당 프로세스는 다시 준비 상태로 CPU 할당을 기다립니다.

프로세스가 대기 상태가 되는 이유에 입출력 작업만 있는 것은 아닙니다. 조금 더 일반적으로 표현하자면 특정 이벤트가 일어나길 기다릴 때 프로세스는 대기 상태가 됩니다. 다만, 프로세스가 대기 상태가 되는 대부분의 원인이 입출력 작업이기 때문에 '프로세스가 입출력 작업을 하면 대기 상태가 된다'고 생각해도 무방합니다.

종료 상태

종료 상태(terminated)는 프로세스가 종료된 상태입니다. 프로세스가 종료되면 운영체제는 PCB와 프로세스가 사용한 메모리를 정리합니다.

프로세스 특징 및 멀티 프로세싱의 단점


멀티 프로세싱 방식은 CPU에서 여러 프로세스를 로테이션으로 돌면서 처리한다.(스케줄링 알고리즘)

동작중인 프로세스가 해당 프로세스의 상태(Context)를 보관하고, 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태(Context)를 복구하게 된다.

이러한 일련의 과정을 Context Switching이라고 하는데 프로세스는 각각 독립된 메모리 영역이다보니 캐쉬 메모리 초기화 등 꽤나 무거운 작업이 진행되고 오버헤드가 발생한다.

Referecne